package com.example.demo.dependenceInversion;

import com.example.demo.dependenceInversion.impl.Easettle;
import com.example.demo.dependenceInversion.impl.JavaICourse;

/**
 * Created by Easettle
 * Date:2020/6/17 23:41
 * Email:easettle@qq.com
 */
public class DependenceInversionPrincipleApplication {


    public static void main(String[] args) {
        Easettle easettle = new Easettle();
        /**
         * 构造器实例化Easettle类，然后调用里面已经实现好的方法
         * DependenceInversionPrincipleApplication ---调用方称为高层，Easettle称为底层
         */
        easettle.StudyAiCoure();
        easettle.StudyJavaCource();
        easettle.StudyPythonCoure();
        System.out.println("----1.0基于实现去编程");

        /**
         * 通过构造器实例化的类调用study方法，study方法依赖注入了ICourse,
         * 而JavaICourse里面依赖注入了ICourse所以可以直接传入JavaICourse来调用JavaICourse里面的study方法
         * 2.0搞法 依赖注入--实现依赖倒置
         */
        easettle.study(new JavaICourse());
        System.out.println("----2.0做法：依赖注入");

        /**
         * 3.0 构造器注入
         */
        Easettle easettle3 = new Easettle(new JavaICourse());
        easettle3.study2();
        System.out.println("----3.0做法：构造器注入");
        /**
         * 4.0 set注入
         */
        easettle.setiCourse(new JavaICourse());
        easettle.study2();
        System.out.println("----4.0做法： set注入");
    }
}
